package it.azienda.framework.controllo;

import it.azienda.framework.utilita.Utilita;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import it.azienda.managerworkstandard.modello.BeanLogin;
import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.framework.persistenza.DAOException;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.hibernate.Session;

public class AzioneLogin implements Serializable{
    
    public String esegui(){
        String forward="";
        FacesContext ctx = FacesContext.getCurrentInstance();
        BeanLogin login = (BeanLogin) ctx.getApplication().getVariableResolver().resolveVariable(ctx,"login");
        BeanLogin utenteCaricato = caricaUtente(login.getNomeUtente());
        
        if(utenteCaricato==null){
            ctx.addMessage(null,new FacesMessage("Utente Non Registrato"));
            forward= "erroreLogin";
        }else{
            login.verificaPassword(utenteCaricato.getPasswd());
            if(!login.isAutenticato()){
                ctx.addMessage(null,new FacesMessage("Password Errata"));
                forward= "erroreLogin";
            }else{                
                login=utenteCaricato;                
                Utilita.getSession().setAttribute("login",login);
                forward= "successo";
            }
        }
        return forward;
    }
    
    public BeanLogin caricaUtente(String nomeUtente){
        Session sessione = DAOConnectionSingleton.newSession();
        
        BeanLogin login = null;
        try{
            
            DAOConnectionSingleton.beginTransaction();
            List risultato=(ArrayList)sessione.getNamedQuery("caricaUtente").setString("nomeUtente",nomeUtente).list();
            DAOConnectionSingleton.commitTransaction();
            if(risultato.size()!=0){
                login=(BeanLogin)risultato.get(0);
            }
        }catch(DAOException ex){
            ex.printStackTrace();
            System.out.println("errore"+ex.getCause());
            try{
                DAOConnectionSingleton.rollbackTransaction();
                
            }catch(DAOException exc){}
        }finally{
            DAOConnectionSingleton.closeSession();
        }
        return login;
    }
}

